package com.cps.platform.service.hbase;

import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;

/**
 * <p>
 * 文件名称: IHbaseService.java
 * </p>
 * <p>
 * 文件描述: HBASE数据库REST服务接口
 * <p>
 * 版权所有: 版权所有(C)2011
 * </p>
 * <p>
 * 公 司: 联通系统集成有限公司
 * </p>
 * <p>
 * 完成日期：2012-12-3
 * </p>
 * 
 * @author ChenZhang
 */
@Consumes({"application/json"})
public interface IHbaseService {
	/**
	 * 创建一张表
	 * 
	 * @param appId
	 * @param authToken
	 * @param tenantId
	 * @param tablename
	 * 
	 * @return Response
	 */
	@GET
	@Path("/create/{appId}/{authToken}/{tenantId}/{tablename}")
	@Produces({"application/json"})
	public Response creatTable(@PathParam("appId") String appId, @PathParam("authToken") String authToken, 
			@PathParam("tenantId") String tenantId, 
			@PathParam("tablename") String tablename);
	
	/**
	 * 删除一张表
	 * 
	 * @param appId
	 * @param authToken
	 * @param tenantId
	 * @param tablename
	 * 
	 * @return Response
	 */
	@DELETE
	@Path("/drop/{appId}/{authToken}/{tenantId}/{tablename}")
	@Produces({"application/json"})
	public Response dropTable(@PathParam("appId") String appId, @PathParam("authToken") String authToken, 
			@PathParam("tenantId") String tenantId, 
			@PathParam("tablename") String tablename);
	
	/**
	 * 添加或更新数据
	 * 
	 * @param appId
	 * @param authToken
	 * @param tenantId
	 * @param hbasePut
	 * 
	 * @return Response
	 */
	@POST
	@Path("/save/{appId}/{authToken}/{tenantId}")
	@Produces({"application/json"})
	public String addOrUpdateData(@PathParam("appId") String appId, @PathParam("authToken") String authToken, 
			@PathParam("tenantId") String tenantId, 
			String hbasePutJson);
	
	/**
	 * 删除<br/>
	 * <p>能够一次性删除多条数据，rowkeysJson为一个list<String>格式转换后的JSON数据</p>
	 * 
	 * @param appId
	 * @param authToken
	 * @param tenantId
	 * @param tablename
	 * @param rowKeys
	 * 
	 * @return Response
	 */
	@DELETE
	@Path("/multi-remove/{appId}/{authToken}/{tenantId}/{tablename}/{rowkeysJson}")
	@Produces({"application/json"})
	public Response delDatas(@PathParam("appId") String appId, @PathParam("authToken") String authToken, 
			@PathParam("tenantId") String tenantId, 
			@PathParam("tablename") String tablename, @PathParam("rowkeysJson") String rowKeys);
	
	/**
	 * 删除<br/>
	 * 
	 * @param appId
	 * @param authToken
	 * @param tenantId
	 * @param tablename
	 * @param rowKey
	 * 
	 * @return Response
	 */
	@DELETE
	@Path("/remove/{appId}/{authToken}/{tenantId}/{tablename}/{rowkey}")
	@Produces({"application/json"})
	public Response delData(@PathParam("appId") String appId, @PathParam("authToken") String authToken, 
			@PathParam("tenantId") String tenantId, 
			@PathParam("tablename") String tablename, @PathParam("rowkey") String rowKey);
	
	/**
	 * 查询对象（根据rowKey查询）
	 * 
	 * @param appId
	 * @param authToken
	 * @param tenantId
	 * @param tablename
	 * @param rowKey
	 * 
	 * @return 返回HbasePut对象的JSON格式数据
	 */
	@GET
	@Path("/get/{appId}/{authToken}/{tenantId}/{tablename}/{rowkey}")
	@Produces({"application/json"})
	public String selectRowKey(@PathParam("appId") String appId, @PathParam("authToken") String authToken, 
			@PathParam("tenantId") String tenantId, 
			@PathParam("tablename") String tableName, @PathParam("rowkey") String rowKey);
	
	/**
	 * 查询表中的所有数据
	 * 
	 * @param appId
	 * @param authToken
	 * @param tenantId
	 * @param tablename
	 * 
	 * @return 属性是List<HbasePut>对象转成的JSON格式数据
	 */
	@GET
	@Path("/query-all/{appId}/{authToken}/{tenantId}/{tablename}")
	@Produces({"application/json"})
	public String selectAllData(@PathParam("appId") String appId, @PathParam("authToken") String authToken, 
			@PathParam("tenantId") String tenantId, 
			@PathParam("tablename") String tableName);
	
	/**
	 * 根据过滤器查询<br/>
	 * <p>filterJson是一个List<FilterBean>的对象转换成的JSON格式数据</p>
	 * 
	 * @param appId
	 * @param authToken
	 * @param tenantId
	 * @param tableName
	 * @param filterJson
	 * 
	 * @return 属性是List<HbasePut>对象转成的JSON格式数据
	 */
	@GET
	@Path("/query-more/{appId}/{authToken}/{tenantId}/{tablename}/{filterJson}")
	@Produces({"application/json"})
	public String selectMoreData(@PathParam("appId") String appId, @PathParam("authToken") String authToken, 
			@PathParam("tenantId") String tenantId, 
			@PathParam("tablename")String tableName, @PathParam("filterJson") String filterJson);
}
